package cn.tedu.tickets;

/**
 * @author :Colin
 * @version 创建时间: 2021/6/23 14:03
 */
public class TestExtendsV2 {
    public static void main(String[] args) {
        TicketThreadV2 t1 =new TicketThreadV2("t1de");
        TicketThreadV2 t2 =new TicketThreadV2("2");
        TicketThreadV2 t3 =new TicketThreadV2("3");
        TicketThreadV2 t4 =new TicketThreadV2("4");
        TicketThreadV2 t5 =new TicketThreadV2("5");
        TicketThreadV2 t6 =new TicketThreadV2("6");
        TicketThreadV2 t7 =new TicketThreadV2("7");
        t1.setPriority(Thread.MAX_PRIORITY);
        t1.start();
        t2.start();
        t2.setPriority(Thread.MIN_PRIORITY);
        t3.start();
        t4.start();
        t5.start();
        t6.start();
        t7.start();
    }
}
class TicketThreadV2 extends Thread{
    static int tickets = 100;

    public TicketThreadV2(String name) {
    }

    @Override
    public void run() {
        while(true){
            /*双重校验2：使用同步代码块
            * synchronized（锁对象）{容易发生数据安全问题的代码}
            * 在同步代码块中，同一时刻，同一资源，只能被一个线程独享，排队
            * 注意：锁对象必须唯一，如果不唯一，还是会发生安全问题
            * 如果是继承方式，锁对象一般使用的是被雷得字节码对象*/
            //synchronized (new Object（）){
            // 错误，因为每个线程都会new一个object对象，锁对象不唯一

            synchronized (TicketThreadV2.class){

                try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
                /*双重校验1：有票的时候 再买票，增加了一个判断*/
                if(tickets > 0){


                    System.out.println(getName()+"="+tickets--);
                }
            if(tickets <= 0)break;


           }

        }
    }
}